﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using WaterBill.BUS;
using WaterBill.DTO;
using DevExpress.XtraGrid.Views.Grid;
using System.Globalization;

namespace WaterBill.GUI
{
    public partial class frmManageCustomer : DevExpress.XtraEditors.XtraForm
    {
        BUS_Customers busCus = new BUS_Customers();
        BUS_Bills busBill = new BUS_Bills();
        public frmManageCustomer()
        {
            InitializeComponent();
        }

        private void frmManageCustomer_Load(object sender, EventArgs e)
        {
            loadForm();
        }

        private void loadForm()
        {
            try
            {
                gcCustomer.DataSource = busCus.BUS_Customers_GetAll();

                DataTable dtStatus = new DataTable();
                dtStatus.Columns.Add("Value", typeof(int));
                dtStatus.Columns.Add("Text");
                DataRow drStatus;
                drStatus = dtStatus.NewRow();
                drStatus["Value"] = 1;
                drStatus["Text"] = "Hoạt động";
                dtStatus.Rows.Add(drStatus);
                drStatus = dtStatus.NewRow();
                drStatus["Value"] = 2;
                drStatus["Text"] = "Không hoạt động";
                dtStatus.Rows.Add(drStatus);
                cbbStatus.DataSource = dtStatus;
                cbbStatus.DisplayMember = "Text";
                cbbStatus.ValueMember = "Value";
                cbbStatus.SelectedIndex = 0;

                BUS_Hamlets busHamlets = new BUS_Hamlets();
                cbbHamlet.DataSource = busHamlets.BUS_Hamlets_GetStatusEnable();
                cbbHamlet.DisplayMember = "Name";
                cbbHamlet.ValueMember = "HamletId";

                btnAdd.Enabled = true;
                btnEdit.Enabled = false;
                btnSave.Enabled = false;
                btnCancel.Enabled = false;
                btnDelete.Enabled = false;
                EnableFalseField();
                EmptyField();
            }
            catch
            {
            }          
        }
        private void gvCustomer_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            try
            {
                btnAdd.Enabled = true;
                btnEdit.Enabled = true;
                btnSave.Enabled = false;
                btnCancel.Enabled = false;
                btnDelete.Enabled = true;
                EnableFalseField();

                txtCustomerId.Text = Convert.ToString(((GridView)sender).GetRowCellValue(e.FocusedRowHandle, "CustomerId"));
                txtFullName.Text = Convert.ToString(((GridView)sender).GetRowCellValue(e.FocusedRowHandle, "FullName"));
                txtHouseNumber.Text = Convert.ToString(((GridView)sender).GetRowCellValue(e.FocusedRowHandle, "HouseNumber"));
                txtPhone.Text = Convert.ToString(((GridView)sender).GetRowCellValue(e.FocusedRowHandle, "Phone"));
                cbbHamlet.SelectedValue = Convert.ToString(((GridView)sender).GetRowCellValue(e.FocusedRowHandle, "HamletId"));
                cbbNest.SelectedValue = Convert.ToString(((GridView)sender).GetRowCellValue(e.FocusedRowHandle, "NestId"));
                dRegisteredDate.Text = string.Format("{0:dd/MM/yyyy}", ((GridView)sender).GetRowCellValue(e.FocusedRowHandle, "RegisteredDate")).ToString();//Convert.ToDateTime(((GridView)sender).GetRowCellValue(e.FocusedRowHandle, "RegisteredDate")).ToShortDateString();
                cbbStatus.SelectedValue = Convert.ToString(((GridView)sender).GetRowCellValue(e.FocusedRowHandle, "Status"));
                txtRowHandle.Text = e.FocusedRowHandle.ToString();
            }
            catch
            {
                btnEdit.Enabled = false;
            }
        }

        private void EnableTrueField()
        {
            txtFullName.Enabled = true;
            txtHouseNumber.Enabled = true;
            cbbNest.Enabled = true;
            cbbHamlet.Enabled = true;
            txtPhone.Enabled = true;
            dRegisteredDate.Enabled = true;
            cbbStatus.Enabled = true;
        }

        private void EnableFalseField()
        {
            txtFullName.Enabled = false;
            txtHouseNumber.Enabled = false;
            cbbNest.Enabled = false;
            cbbHamlet.Enabled = false;
            txtPhone.Enabled = false;
            dRegisteredDate.Enabled = false;
            cbbStatus.Enabled = false;
        }

        private void EmptyField()
        {
            txtCustomerId.Text = "";
            txtFullName.Text = "";
            txtHouseNumber.Text = "";
            cbbNest.Text = "";
            cbbHamlet.Text = "";
            txtPhone.Text = "";
            dRegisteredDate.Text = "";
            cbbStatus.Text = "";
        }
        private void cbbHamlet_SelectedValueChanged(object sender, EventArgs e)
        {
            try
            {
                int HamletId = Convert.ToInt32(cbbHamlet.SelectedValue.ToString());
                BUS_Nests busNests = new BUS_Nests();
                cbbNest.DataSource = busNests.BUS_Nests_GetByHamletId(HamletId);
                cbbNest.DisplayMember = "Name";
                cbbNest.ValueMember = "NestId";
            }
            catch
            {
            }
            
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            btnAdd.Enabled = false;
            btnEdit.Enabled = false;
            btnSave.Enabled = true;
            btnCancel.Enabled = true;
            btnDelete.Enabled = false;
            EnableTrueField();
            EmptyField();
        }

        private void btnEdit_Click(object sender, EventArgs e)
        {
            btnAdd.Enabled = true;
            btnSave.Enabled = true;
            btnCancel.Enabled = true;
            btnDelete.Enabled = true;
            EnableTrueField();
            int CustomerId = Convert.ToInt32(txtCustomerId.Text);
            if (busBill.BUS_Bills_CountByCustomerId(CustomerId) > 0)
            {
                dRegisteredDate.Enabled = false;
            }
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (txtFullName.Text != "")
            {
                if (txtHouseNumber.Text != "")
                {
                    if (cbbNest.Text != "")
                    {
                        //if (txtPhone.Text != "")
                        //{
                            if (dRegisteredDate.Text != "")
                            {
                                DTO_Customers obj = new DTO_Customers();
                                obj.FullName = txtFullName.Text;
                                obj.HouseNumber = txtHouseNumber.Text;
                                obj.NestId = Convert.ToInt32(cbbNest.SelectedValue.ToString());
                                obj.Phone = txtPhone.Text;
                                try
                                {
                                    string[] d = dRegisteredDate.Text.Split('/');
                                    obj.RegisteredDate = Convert.ToDateTime(d[2] + "-" + d[1] + "-" + d[0]);
                                }
                                catch (Exception)
                                {
                                    XtraMessageBox.Show("Cảnh báo, ngày đăng ký sử dụng bị lỗi định dạng. Hiện thống sẽ lấy ngày hiện tại.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                    obj.RegisteredDate = DateTime.Now;
                                }
                                
                                obj.Status = Convert.ToInt32(cbbStatus.SelectedValue);
                                if (txtCustomerId.Text == "")
                                {
                                    if (busCus.BUS_Customers_Insert(obj))
                                    {
                                        XtraMessageBox.Show("Thêm thành công.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                                        gcCustomer.DataSource = busCus.BUS_Customers_GetAll();
                                        btnEdit.Enabled = false;
                                        btnDelete.Enabled = false;
                                        EmptyField();
                                   
                                    }
                                    else
                                    {
                                        XtraMessageBox.Show("Lỗi, không thể thêm được.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    }
                                }
                                else
                                {
                                    obj.CustomerId = Convert.ToInt32(txtCustomerId.Text);
                                    if (busCus.BUS_Customers_Update(obj))
                                    {
                                        XtraMessageBox.Show("Sửa thành công.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                                        gvCustomer.SetRowCellValue(int.Parse(txtRowHandle.Text), "FullName", txtFullName.Text);
                                        gvCustomer.SetRowCellValue(int.Parse(txtRowHandle.Text), "HouseNumber", txtHouseNumber.Text);
                                        gvCustomer.SetRowCellValue(int.Parse(txtRowHandle.Text), "NameNest", cbbNest.Text);
                                        gvCustomer.SetRowCellValue(int.Parse(txtRowHandle.Text), "NestId", cbbNest.SelectedValue);
                                        gvCustomer.SetRowCellValue(int.Parse(txtRowHandle.Text), "NameHamlet", cbbHamlet.Text);
                                        gvCustomer.SetRowCellValue(int.Parse(txtRowHandle.Text), "HamletId", cbbHamlet.SelectedValue);
                                        gvCustomer.SetRowCellValue(int.Parse(txtRowHandle.Text), "Phone", txtPhone.Text);
                                        gvCustomer.SetRowCellValue(int.Parse(txtRowHandle.Text), "RegisteredDate", dRegisteredDate.Text);
                                        gvCustomer.SetRowCellValue(int.Parse(txtRowHandle.Text), "Status", cbbStatus.SelectedValue);
                                        btnEdit.Enabled = true;
                                        btnDelete.Enabled = true;
                                    }
                                    else
                                    {
                                        XtraMessageBox.Show("Lỗi, không thể sửa được.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    }
                                }
                                btnAdd.Enabled = true;
                                btnSave.Enabled = false;
                                btnCancel.Enabled = false;
                                EnableFalseField();
                            }
                            else
                            {
                                XtraMessageBox.Show("Ngày đăng ký sử dụng không được bỏ trống", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                dRegisteredDate.Focus();
                            }
                        //}
                        //else
                        //{
                        //    XtraMessageBox.Show("Số điện thoại không được bỏ trống", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        //    txtPhone.Focus();
                        //}
                    }
                    else
                    {
                        XtraMessageBox.Show("Tổ không được bỏ trống", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        cbbNest.Focus();
                    }
                }
                else
                {
                    XtraMessageBox.Show("Số nhà không được bỏ trống", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtHouseNumber.Focus();
                }
            }
            else
            {
                XtraMessageBox.Show("Họ tên không được bỏ trống", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtFullName.Focus();
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            btnAdd.Enabled = true;
            btnSave.Enabled = false;
            btnCancel.Enabled = false;
            btnDelete.Enabled = true;
            EnableFalseField();
            if (txtCustomerId.Text == "")
            {
                btnDelete.Enabled = false;
                EmptyField();
            }
        }

        private void btnPrint_Click(object sender, EventArgs e)
        {
            gcCustomer.ShowPrintPreview();
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (txtCustomerId.Text != "")
            {
                int CustomerId = Convert.ToInt32(txtCustomerId.Text);
                if (XtraMessageBox.Show("Bạn có chắc là muốn xóa khách hàng có mã sử dụng #" + CustomerId + "?", "Cảnh báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    if (busCus.BUS_Customers_Delete(CustomerId))
                    {
                        XtraMessageBox.Show("Xóa thành công khách hàng có mã sử dụng #" + CustomerId + " ^.^...!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        gvCustomer.DeleteRow(int.Parse(txtRowHandle.Text));
                    }
                    else
                    {
                        XtraMessageBox.Show("Lỗi, không thể xóa khách hàng có mã sử dụng #" + CustomerId + ", vì khách hàng này có liên quan tới nhiều hóa đơn hoặc gặp một lỗi nào đó.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            else XtraMessageBox.Show("Cảnh báo, chưa có khách hàng nào được chọn.", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void btnRefresh_Click(object sender, EventArgs e)
        {
            splashScreenManager1.ShowWaitForm();
            loadForm();
            splashScreenManager1.CloseWaitForm();
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            gvCustomer.MoveNext();
        }

        private void btnPrev_Click(object sender, EventArgs e)
        {
            gvCustomer.MovePrev();
        }

        private void cbbHamlet_DropDown(object sender, EventArgs e)
        {
            try
            {
            var hamlet = cbbHamlet.SelectedValue;
            BUS_Hamlets busHamlets = new BUS_Hamlets();
            cbbHamlet.DataSource = busHamlets.BUS_Hamlets_GetStatusEnable();
            cbbHamlet.DisplayMember = "Name";
            cbbHamlet.ValueMember = "HamletId";
            cbbHamlet.SelectedValue = hamlet;
            }
            catch
            {
            }
        }

        private void cbbNest_DropDown(object sender, EventArgs e)
        {
            try
            {
                var nest = cbbNest.SelectedValue;
                int HamletId = Convert.ToInt32(cbbHamlet.SelectedValue.ToString());
                BUS_Nests busNests = new BUS_Nests();
                cbbNest.DataSource = busNests.BUS_Nests_GetByHamletId(HamletId);
                cbbNest.DisplayMember = "Name";
                cbbNest.ValueMember = "NestId";
                cbbNest.SelectedValue = nest;
            }
            catch
            {
            }
        }

     
    }
    
}